<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>GROOPS - Kinematic orbit determination of LEO satellites</title>

    <!-- JQuery and Popper -->
    <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>

    <!-- Bootstrap -->
    <!-- https://getbootstrap.com/docs/4.1/examples/ -->
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">

    <!-- Mathjax -->
    <script type="text/x-mathjax-config">
    MathJax.Hub.Config({tex2jax: {inlineMath: [ ['$','$'] ],
                                  displayMath: [ ["\\[","\\]"] ],
                                  processEscapes: true},
                        TeX:     {Macros: {M: ["{\\mathbf #1}",1]},
                                  equationNumbers: {autoNumber: "all"}  }});
    </script>
    <script async src="https://cdn.jsdelivr.net/npm/mathjax@2.7.7/MathJax.js?config=TeX-AMS_CHTML" integrity="sha384-e/4/LvThKH1gwzXhdbY2AsjR3rm7LHWyhIG5C0jiRfn8AN2eTN5ILeztWw0H9jmN" crossorigin="anonymous"></script>

    <!-- lunr -->
    <script src="https://cdn.jsdelivr.net/npm/lunr@2.3.8/lunr.min.js" integrity="sha384-vRQ9bDyE0Wnu+lMfm57BlYLO0/XauFuKpVsZPs7KEDwYKktWi5+Kz3MP8++DFlRY" crossorigin="anonymous"></script>

    <!-- Mustache -->
    <script src="https://cdn.jsdelivr.net/npm/mustache@4.0.1/mustache.min.js" integrity="sha384-0PLEZVBpOQ+Kqw3anJWSNWvRxpEFt02tSpBvyRsA4WcvX/OTldWdXxGLVLvh954H" crossorigin="anonymous"></script>

    <!-- GROOPS Stylesheet -->
    <link rel="stylesheet" href="static/groops.css"/>

    <!-- icon -->
    <link rel="icon" href="static/groops_icon.png">

</head>
<body>
    <header>
        <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
            <div class="container">
              <a class="navbar-brand" href="index.html"><img class="logo" src="static/groops_white.svg"></a>
              <div class="collapse navbar-collapse" id="mainNavbar">
                <ul class="navbar-nav mr-auto">
                  <li class="nav-item">
                    <a class="nav-link" href="programType.html">Programs</a>
                  </li>
                  <li class="nav-item">
                    <a class="nav-link" href="classes.html">Classes</a>
                  </li>
                  <li class="nav-item">
                    <a class="nav-link" href="general.parser.html">Parser</a>
                  </li>
                  <li class="nav-item">
                    <a class="nav-link" href="general.fileFormat.html">File Formats</a>
                  </li>
                </ul>
              </div>
                <form class="form-inline my-2 my-lg-0" action="search.html" id="searchTools">
                  <input class="form-control mr-sm-2" placeholder="Search" name="searchTerms" method="GET" value="" type="text" id="searchBox">
                  <button class="btn btn-secondary my-2 my-sm-0" type="submit" id="searchButton">Search</button>
                </form>
              <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#mainNavbar" aria-controls="mainNavbar" aria-expanded="false" aria-label="Toggle navigation" style="">
                <span class="navbar-toggler-icon"></span>
              </button>
            </div>
        </nav>
    </header>
    <main class="container px-0 pt-2 top-buffer">
        <div id="content" class="container">
            <h1 id="cookbook.kinematicOrbit">Kinematic orbit determination of LEO satellites</h1><p>
This cookbook chapter describes exemplarily the steps for determining kinematic orbits of low-Earth orbit (LEO) satellites.</p><p>An example scenario for this task is available at <a href="https://ftp.tugraz.at/outgoing/ITSG/groops/scenario/scenarioLeoKinematicOrbit.zip" target="_blank">https://ftp.tugraz.at/outgoing/ITSG/groops/scenario/scenarioLeoKinematicOrbit.zip</a>.
It includes GROOPS scripts and data for the example, but not the general GROOPS data and metadata found at <a href="https://ftp.tugraz.at/outgoing/ITSG/groops" target="_blank">https://ftp.tugraz.at/outgoing/ITSG/groops</a> (data folder or zipped archive).
The scenario generally represents what is described in this cookbook, but may slightly differ in certain settings.</p><p><h2 id="gnssMetadata">Prepare GNSS satellite data</h2><p>
Most of the required metadata files are provided in GROOPS file formats at <a href="https://ftp.tugraz.at/outgoing/ITSG/groops" target="_blank">https://ftp.tugraz.at/outgoing/ITSG/groops</a>.
These files are regularly updated.</p><p>Data that has to be gathered from other sources comprises:
<ul>

  <li><b>Receiver observations</b>: GNSS measurements converted from RINEX format (see <a class="groops-program" href="RinexObservation2GnssReceiver.html">RinexObservation2GnssReceiver</a>)
  </li><li>
<b>Precise orbits</b>: precise orbits in CRF for orbit integration (see <a class="groops-program" href="Sp3Format2Orbit.html">Sp3Format2Orbit</a>)
  </li><li>
<b>Precise clocks</b>: precise clocks (see <a class="groops-program" href="GnssClockRinex2InstrumentClock.html">GnssClockRinex2InstrumentClock</a>)
  </li><li>
<b>Attitude</b>: rotation from body frame to CRF (see <a class="groops-program" href="SimulateStarCameraGnss.html">SimulateStarCameraGnss</a> or <a class="groops-program" href="GnssOrbex2StarCamera.html">GnssOrbex2StarCamera</a>)
  </li><li>
<b>Signal biases</b>: code (and phase) biases (see <a class="groops-program" href="GnssSinexBias2SignalBias.html">GnssSinexBias2SignalBias</a>)
</li></ul>

Receiver observations, precise satellite orbits and clocks, and possibly attitude and signal biases can be downloaded from the
<a href="https://igs.org/data-products-overview/">IGS Data Centers</a>.
GPS, GLONASS, and Galileo orbits, clocks, attitude, and signal biases for the period 1994-2020 are also available as part of
<a href="https://doi.org/10.3217/dataset-4528-0723-0867">Graz University of Technology's contribution to IGS repro3</a>.</p><p>The <a href="https://ftp.tugraz.at/outgoing/ITSG/groops/scenario/scenarioLeoKinematicOrbit.zip">example scenario</a> includes a small set of this data.
The script <code>010groopsConvert.xml</code> can be used to convert these external formats into GROOPS formats.</p><p><h2 id="leoMetadata">Prepare LEO metadata</h2><p>
Metadata for several LEO missions is availabe at <a href="https://ftp.tugraz.at/outgoing/ITSG/groops/data/gnss/receiverLowEarthOrbiter" target="_blank">https://ftp.tugraz.at/outgoing/ITSG/groops/data/gnss/receiverLowEarthOrbiter</a>.</p><p>If you want to process another mission, you can create the necessary files with these steps:
<ul>

  <li>For creating the <a class="groops-file" href="fileFormat_platform.html">GnssSatelliteInfo file</a> use <a class="groops-program" href="PlatformCreate.html">PlatformCreate</a>. Note that the rotation from the
  satellite reference frame into the antenna reference frame, as well as the change of the center of mass due to fuel consumption, has to be considered here.
  </li><li>
The <a class="groops-file" href="fileFormat_gnssReceiverDefinition.html">GnssReceiverDefinition file</a> can be created by using <a class="groops-program" href="GnssReceiverDefinitionCreate.html">GnssReceiverDefinitionCreate</a>. Here you can specify which GNSS signal types the receiver observes.
  </li><li>
For creating the <a class="groops-file" href="fileFormat_gnssAntennaDefinition.html">GnssAntennaDefinition file</a> use <a class="groops-program" href="GnssAntennaDefinitionCreate.html">GnssAntennaDefinitionCreate</a>. Here you can define phase center offsets for the antenna.
  </li><li>
For determining the elevation dependent accuracies the program <a class="groops-program" href="GnssAntennaDefinitionCreate.html">GnssAntennaDefinitionCreate</a> is used again.
  <ul>

    </li><li>
<strong class="groops-config-element">antenna</strong>: set to new
    </li><li>
Set the <strong class="groops-config-element">pattern</strong>s for code (<strong class="groops-config-element">type</strong>=<code>C**</code>) and phase
    (<strong class="groops-config-element">type</strong>=<code>L**</code>). The standard deviation is expressed e.g. with <strong class="groops-config-element">values</strong>=<code>0.001/cos(2*PI/180*zenith)</code>.
  </li></ul>

</ul></p><p><h2 id="leoData">Prepare LEO data</h2><p>
The <a href="https://ftp.tugraz.at/outgoing/ITSG/groops/scenario/scenarioLeoKinematicOrbit.zip">example scenario</a> includes a small set of this data for the GRACE-FO mission.
The script <code>020groopsConvertGracefo.xml</code> can be used to convert these external formats into GROOPS formats.</p><p>The data preparation steps are:
<ul>

  <li>Conversion of the approximate orbit and star camera data into GROOPS format using a conversion program.
  </li><li>
If no attitude data is given the star camera data can be simulated by using <a class="groops-program" href="SimulateStarCamera.html">SimulateStarCamera</a> or <a class="groops-program" href="SimulateStarCameraSentinel1.html">SimulateStarCameraSentinel1</a>.
  </li><li>
The GNSS observation data (given in RINEX format) can be converted with <a class="groops-program" href="RinexObservation2GnssReceiver.html">RinexObservation2GnssReceiver</a>.
  </li><li>
Suitable programs to get daily data are <a class="groops-program" href="InstrumentConcatenate.html">InstrumentConcatenate</a> and <a class="groops-program" href="InstrumentSynchronize.html">InstrumentSynchronize</a>.
  </li><li>
For interpolating the orbit and star camera data to GNSS receiver epochs use <a class="groops-program" href="InstrumentResample.html">InstrumentResample</a> and provide the converted RINEX observation file as input for
  <a class="groops-class" href="timeSeriesType.html#instrument">timeSeries:instrument</a>.
  </li><li>
For synchronizing these data use <a class="groops-program" href="InstrumentSynchronize.html">InstrumentSynchronize</a>.
</li></ul>

Detailed description of instrument data handling can be found in <a class="groops-ref" href="cookbook.instrument.html">Instrument data handling</a>.</p><p><h2 id="processing">Estimate kinematic orbits</h2><p>
The script <code>03groopsGnssProcessing.xml</code> in the <a href="https://ftp.tugraz.at/outgoing/ITSG/groops/scenario/scenarioLeoKinematicOrbit.zip">example scenario</a>
implements the following steps and settings.</p><p>These are the settings for <a class="groops-program" href="GnssProcessing.html">GnssProcessing</a>. If not otherwise stated use the default values.</p><p>As we have only one receiver the processing sampling can be directly taken from the observation file:
<a class="groops-class" href="timeSeriesType.html#instrument">timeSeries:instrument</a>.</p><p>Add the appropriate <a class="groops-class" href="gnssTransmitterGeneratorType.html#gnss">transmitters:gnss</a> (e.g. GPS)
and provide the required files (from <a class="groops-ref" href="cookbook.kinematicOrbit.html#gnssMetadata">Prepare GNSS satellite data</a>):
<ul>

  <li><a class="groops-class" href="fileFormat_instrument.html">inputfileOrbit</a>
  </li><li>
<a class="groops-class" href="fileFormat_instrument.html">inputfileAttitude</a>
  </li><li>
<a class="groops-class" href="fileFormat_instrument.html">inputfileClock</a>
</li></ul>
</p><p>The following files (from <a class="groops-ref" href="cookbook.kinematicOrbit.html#leoMetadata">Prepare LEO metadata</a> and <a class="groops-ref" href="cookbook.kinematicOrbit.html#leoData">Prepare LEO data</a>) and settings are needed in <a class="groops-class" href="gnssReceiverGeneratorType.html#lowEarthOrbiter">receiver:lowEarthOrbiter</a>:
<ul>

   <li><a class="groops-class" href="fileFormat_platform.html">inputfileStationInfo</a>: The satellite info file.
   </li><li>
<a class="groops-class" href="fileFormat_gnssAntennaDefinition.html">inputfileAntennaDefinition</a>
   </li><li>
<a class="groops-class" href="fileFormat_gnssReceiverDefinition.html">inputfileReceiverDefinition</a>
   </li><li>
<a class="groops-class" href="fileFormat_gnssAntennaDefinition.html">inputfileAccuracyDefinition</a>
   </li><li>
<a class="groops-class" href="fileFormat_instrument.html">inputfileObservations</a>: The converted RINEX observation file.
   </li><li>
<a class="groops-class" href="fileFormat_instrument.html">inputfileOrbit</a>: The approximate orbit.
   </li><li>
<a class="groops-class" href="fileFormat_instrument.html">inputfileStarCamera</a>: The convered or simulated attitude.
   </li><li>
<a class="groops-class" href="gnssType.html">useType</a>: We recommend to explicitly specify the signals to be processed
            and to make sure that at least transmitter code biases are provided for each of them, e.g. <code>C1CG</code>,
            <code>C1WG</code>, <code>C2WG</code>, <code>L1*G</code>, <code>L2*G</code>, ...).
</li></ul>
</p><p>Add the following <a class="groops-class" href="gnssParametrizationType.html">parametrizations</a>
and define the <strong class="groops-config-element">outputfiles</strong> within you are interested in:
<ul>

  <li><a class="groops-class" href="gnssParametrizationType.html#ionosphereSTEC">ionosphereSTEC</a>: add a constraint of <strong class="groops-config-element">sigmaSTEC</strong>=<code>40</code>
  </li><li>
<a class="groops-class" href="gnssParametrizationType.html#ionosphereVTEC">ionosphereVTEC</a>:
        set <strong class="groops-config-element">mapR</strong>=<code>6371e3+450e3</code> to satellite height and ionosphere height <strong class="groops-config-element">mapH</strong>=<code>50e3</code> above.
  </li><li>
<a class="groops-class" href="gnssParametrizationType.html#clocks">clocks</a>: delete <a class="groops-class" href="platformSelectorType.html">selectTransmitters</a>
  </li><li>
<a class="groops-class" href="gnssParametrizationType.html#signalBiases">signalBiases</a>: provide <a class="groops-class" href="fileFormat_gnssSignalBias.html">inputfileSignalBiasTransmitter</a> created with <a class="groops-program" href="GnssSinexBias2SignalBias.html">GnssSinexBias2SignalBias</a>
  </li><li>
<a class="groops-class" href="gnssParametrizationType.html#ambiguities">ambiguities</a>: if precise transmitter phase biases are available you can delete <a class="groops-class" href="platformSelectorType.html">estimateTransmitterPhaseBiases</a>
  </li><li>
<a class="groops-class" href="gnssParametrizationType.html#codeBiases">codeBiases</a>: delete <a class="groops-class" href="platformSelectorType.html">selectTransmitters</a>, set <strong class="groops-config-element">sigmaZeroMeanConstraint</strong>=<code>0</code>
  </li><li>
<a class="groops-class" href="gnssParametrizationType.html#tecBiases">tecBiases</a>: delete <a class="groops-class" href="platformSelectorType.html">selectTransmitters</a>, set <strong class="groops-config-element">sigmaZeroMeanConstraint</strong>=<code>0</code>
  </li><li>
<a class="groops-class" href="gnssParametrizationType.html#kinematicPositions">kinematicPositions</a>
</li></ul>
</p><p>Add the following <a class="groops-class" href="gnssProcessingStepType.html">processingSteps</a>:
<ul>

  <li><a class="groops-class" href="gnssProcessingStepType.html#estimate">estimate</a>: with <strong class="groops-config-element">maxIterationCount</strong>=<code>8</code>
  </li><li>
<a class="groops-class" href="gnssProcessingStepType.html#resolveAmbiguities">resolveAmbiguities</a>
  </li><li>
<a class="groops-class" href="gnssProcessingStepType.html#estimate">estimate</a>: with <strong class="groops-config-element">maxIterationCount</strong>=<code>2</code>
  </li><li>
<a class="groops-class" href="gnssProcessingStepType.html#computeCovarianceMatrix">computeCovarianceMatrix</a>
  </li><li>
<a class="groops-class" href="gnssProcessingStepType.html#writeResults">writeResults</a>
</li></ul>
</p><p>
</p>

        </div>
    </main>
</body>
</html>
